package net.huashitong.supervision.AppNew.appService;

import com.sirdc.modules.sys.dao.SysUserDao;
import com.sirdc.modules.sys.entity.SysUser;
import com.sirdc.modules.utils.ObjectUtils;
import com.sirdc.modules.utils.StringUtils;
import com.yunpian.sdk.api.YunpianApi;
import net.huashitong.supervision.AppNew.DTO.UserDTO;
import net.huashitong.supervision.task.dao.TaskMainDao;
import net.huashitong.supervision.task.entity.SpecialTask;
import net.huashitong.supervision.task.entity.TaskMain;
import net.huashitong.supervision.task.entity.TaskUnit;
import net.huashitong.supervision.task.entity.TaskUser;
import net.huashitong.supervision.task.filter.TaskMainFilter;
import net.huashitong.supervision.task.filter.TaskUnitFilter;
import net.huashitong.supervision.task.service.SpecialTaskService;
import net.huashitong.supervision.task.service.TaskSubService;
import net.huashitong.supervision.task.service.TaskUnitService;
import net.huashitong.supervision.task.service.TaskUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class AppTaskService {

    @Autowired
    private TaskMainDao taskMainDao ;
    @Autowired
    private TaskSubService taskSubService;

    @Autowired
    private TaskUnitService taskUnitService;
    @Autowired
    private SysUserDao userDao;

    @Autowired
    private TaskUserService taskUserService;
    @Autowired
    private SpecialTaskService specialTaskService;


    public List<TaskMainFilter> getMainTask(TaskMainFilter filter)
    {

        List<TaskMain> taskMains = taskMainDao.queryAboutMyTask(filter);
        List<TaskMainFilter> dataList = new ArrayList<>();
        for (TaskMain taskMain : taskMains) {
            TaskMainFilter dto = new TaskMainFilter();
            BeanUtils.copyProperties(taskMain,dto);
            String createUser = dto.getCreateUser();
            SysUser user = userDao.getById(createUser);
            if(ObjectUtils.isNotBlank(user))
            {
                dto.setCreateUserName(user.getName());
            }
            dataList.add(dto);
        }

//        System.out.println(taskMains);
        return  dataList;
    }


    /**
     * 根据主任务id 获取所有子任务和单位
     * @param filter
     * @return
     */
    public List<TaskUnit> getSubTaskList(TaskUnitFilter filter)
    {
        List<TaskUnitFilter> dataList = new ArrayList<>();
        List<TaskUnit> taskUnitList = taskUnitService.getByMainId(filter.getTaskMainId());

        return taskUnitList;

    }

    /**
     *  单位任务 type /任务状态(0.待签收,1待反馈,2已反馈,3退回,4完成 。5已签收, 6回退单-未签收，7回退单-待反馈，8回退单-已反馈，9回退单-完成)
     *  人员任务  //状态（0未处理，1已批转，2反馈，3退回，4完成 .5已签收）
     * @param sysId
     * @param type
     */
    public int  updateTaskType(String sysId, String type, UserDTO loginer)
    {
        if(StringUtils.isBlank(type))
        {
            return -1;
        }
        String taskType="";
        if(loginer.getRoleId().equals("04"))
        {
            TaskUser userTask = taskUserService.getById(sysId);
            taskType =userTask.getStatus();
            if(taskType.equals(type))//改变状态和现在状态一样，就不改变了。
            {
                return 1;
            }
            if(!"4".equals(taskType)&&!"9".equals(taskType)&&userTask.getUnitUserId().equals(loginer.getUserId())) //已完成等不更新
            {
                userTask.setStatus("1");
                taskUserService.update(userTask);
                return 1;
            }
        }else {
            String deptId ="";
            TaskUnit taskUnit = taskUnitService.getById(sysId);
            SpecialTask specialTask=null;
            if (ObjectUtils.isNotBlank(taskUnit)) {
                taskType = taskUnit.getType();
                deptId=taskUnit.getDeptId();
            }else {
                 specialTask = specialTaskService.getById(sysId);
                taskType=specialTask.getType();
                //taskType;   //任务类型;  (1 攻坚办  2 单位重大事项)
                if ("1".equals(specialTask.getTaskType())) {
                    deptId=specialTask.getInspectionId();
                }else {
                    deptId=specialTask.getOverdueDeptId();
                }
            }


            if(taskType.equals(type)||"2".equals(taskType))//改变状态和现在状态一样，就不改变了。
            {
                return 1;
            }
            if(!"4".equals(taskType)&&!"9".equals(taskType)&&deptId.equals(loginer.getDeptId())) //已完成等不更新
            {
                if(ObjectUtils.isNotBlank(taskUnit))
                {
                    taskUnit.setType(type);
                    taskUnitService.update(taskUnit);
                }
                if(ObjectUtils.isNotBlank(specialTask))
                {
                    specialTask.setType(type);
                    specialTaskService.update(specialTask);
                }



                return  1;
            }
        }



        return 1;
    }


}
